# -*- coding:utf-8 -*-
# @Time:2024/4/1921:01
# @Author:miuzg
# @FileName:new test2.py
# @Software:PyCharm

# 在官网中进入到皮肤页面。查看网页源代码发现没有图片数据[动态页面]
# 在检查中可以找到图片的url,但是这个图片并没有规律
# 既然html找不到合适的数据，就去尝试找到生成图片的js
# 在抓包fetch/xhr里。根据关键字找到了两个文件，可能是我们需要的[要找到数据是英雄皮肤，hero英雄，skin皮肤]
# [x.js x为英雄序号，里面有皮肤的数据]
# [x.js x为英雄序号，里面有皮肤的数据]    [hero_list.js 保存的英雄id序号]
# 现在要做的是：1.获取hero_list.js里的英雄id 2.根据英雄序号，去获取对应的x.js 3.在x.js中获取需要的皮肤url
# 下载，保存 [皮肤保存为mainImg]

"""
英雄列表，保存了所有的英雄信息
https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js
英雄信息，保存了英雄信息/皮肤信息
https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js
"""

import os
import requests


class lolSpider():
    def __init__(self):
        # 定义请求头
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0'
        }

    def get_hero(self):
        """获取英雄列表"""
        hero_list_url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
        hero_list = requests.get(hero_list_url, headers=self.headers).json()['hero']
        return hero_list

    def get_skin(self, hero_list):
        """根据英雄id获取皮肤图片"""
        for hero in hero_list:
            # 获取英雄名/id
            name = hero['name']
            hero_id = hero['heroId']

            # 创建路径
            path = os.path.join('LOL', name)

            # 获取皮肤
            skin_url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js'

            # 有了皮肤url后，就去获取皮肤的.js文件并获取里面皮肤的图片路径
            skins = requests.get(skin_url, headers=self.headers).json()['skins']

            # 遍历皮肤数据，如果有图片路径，就下载图片
            for skin in skins:
                if skin['mainImg']:
                    self.save_img(skin['name'], path, skin['mainImg'])

    def save_img(self, skin_name, path, skin_url):
        """皮肤名，保存位置，图片url"""
        img = requests.get(skin_url, headers=self.headers).content

        # 获取文件名
        file_name = os.path.join(path, f'{skin_name}.jpg')

        # 创建文件夹
        os.makedirs(path, exist_ok=True)

        with open(file_name, 'wb')as f:
            f.write(img)
        print(f'{file_name}保存成功')

    def run(self):
        """启动爬虫程序"""
        hero_list = self.get_hero()
        self.get_skin(hero_list)


if __name__ == '__main__':
    lol = lolSpider()
    lol.run()
